# ! /usr/bin/python3
# coding=utf-8
# @time: 2025/10/30 16:28
# @Author:鹤川
import re

from airtest.core.api import *
from common.doFile import myLogger
from pages.basePage import BasePage


class JiaZiPage(BasePage):
    eadd = "com.kkpodcast:id/create_clip_iv"
    eadd_text = "com.kkpodcast:id/content_et"
    econfirm = "com.kkpodcast:id/confirm_tv"

    echange = "com.kkpodcast:id/edit_clip_iv"
    eedit = "com.kkpodcast:id/edit_iv"
    echange_text = "com.kkpodcast:id/content_et"
    econfirm_change = "com.kkpodcast:id/confirm_tv"
    eback = "com.kkpodcast:id/back_iv"
    enum = "com.kkpodcast:id/album_clip_num_tv"

    def clean_number_text(self, text):
        """清理文本中的非数字字符，提取纯数字"""
        if not text:
            return 0
        # 使用正则表达式提取数字
        numbers = re.findall(r'\d+', text)
        if numbers:
            return int(numbers[0])
        else:
            print(f"警告: 无法从文本 '{text}' 中提取数字")
            return 0

    def addJia(self, eadd_text):
        num_text = self.getText(self.enum)
        self.begin_num = self.clean_number_text(num_text)
        print(f"添加前夹子数量: '{self.begin_num}'")
        myLogger.info(f"添加前夹子数量: '{self.begin_num}'")

        # 点击加号
        self.clickEle(self.eadd)
        myLogger.info("点击加号")
        # 选择输入夹子输入框，输入内容
        self.inputEle(self.eadd_text, eadd_text)
        time.sleep(1)
        myLogger.info("输入夹子内容")
        time.sleep(1)
        # 点击确认按钮
        self.clickEle(self.econfirm)
        myLogger.info("点击确认按钮")
        return self

    def change_jia(self, echange_text):
        """修改夹子名称"""
        # 获取修改前的所有夹子名称
        self.old_clip_names = self.get_all_clip_names()
        print(f"修改前的夹子列表: {self.old_clip_names}")

        # 判断新名称是否已存在
        if str(echange_text) in self.old_clip_names:
            print(f"❌ 修改失败! 夹子名称 '{echange_text}' 已存在")
            myLogger.error(f"修改失败! 夹子名称 '{echange_text}' 已存在")
            return False

        self.clickEle(self.echange)
        self.clickEle(self.eedit)
        self.inputEle(self.echange_text, echange_text)
        self.clickEle(self.econfirm_change)
        time.sleep(2)
        self.clickEle(self.eback)
        return True

    def addJZOK(self, t):
        self.addJia(t)
        # 添加后获取夹子数量，并清理文本
        num_text = self.getText(self.enum)
        self.end_num = self.clean_number_text(num_text)
        print(f"添加后夹子数量: {self.end_num}")
        myLogger.info(f"添加后夹子数量: {self.end_num}")
        # 判断是否添加成功
        if self.end_num == self.begin_num + 1:
            print(f"夹子添加成功! 数量从 {self.begin_num} 增加到 {self.end_num}")
            myLogger.info(f"夹子添加成功! 数量从 {self.begin_num} 增加到 {self.end_num}")
            return True, self.begin_num, self.end_num
        else:
            print(f"夹子添加失败! 同名夹子不添加，数量仍然是 {self.begin_num}")
            myLogger.error(f"夹子添加失败! 同名夹子不添加，数量仍然是 {self.begin_num}")
            return False, self.begin_num, self.end_num

    def get_all_clip_names(self):
        """获取所有夹子名称"""
        clip_names = []
        try:
            # 使用 ViewGroup 选择器
            view_groups = self.poco("android.view.ViewGroup")
            for i, view_group in enumerate(view_groups):
                try:
                    title_element = view_group.child("com.kkpodcast:id/title_tv")
                    if title_element.exists():
                        clip_name = title_element.get_text()
                        if clip_name and clip_name.strip():
                            clip_names.append(clip_name)
                            print(f"找到第{i+1}个夹子 : {clip_name}")
                except Exception:
                    continue

            print(f"总共找到 {len(clip_names)} 个夹子: {clip_names}")
            return clip_names

        except Exception as e:
            print(f"获取夹子列表时出错: {e}")
            return []

    def changeJZOK(self, expected_name=None):
        """验证修改是否成功"""
        try:
            # 等待页面刷新
            time.sleep(3)

            # 获取修改后的所有夹子名称
            new_clip_names = self.get_all_clip_names()
            print(f"修改后的夹子列表: {new_clip_names}")

            # 判断修改是否成功
            if expected_name:
                expected_name_str = str(expected_name)

                # 如果修改后的名称已经存在，说明修改成功
                if expected_name_str in new_clip_names:
                    print(f"✅ 修改成功! 夹子名称已改为: {expected_name_str}")
                    myLogger.info(f"修改成功! 夹子名称已改为: {expected_name_str}")
                    return True
                else:
                    print(f"❌ 修改失败! 未找到夹子: {expected_name_str}")
                    myLogger.error(f"修改失败! 未找到夹子: {expected_name_str}")
                    return False
            else:
                # 如果没有提供预期名称，直接返回成功
                return True

        except Exception as e:
            print(f"验证修改结果时出错: {e}")
            myLogger.error(f"验证修改结果时出错: {e}")
            return False


if __name__ == '__main__':
    jiazi_page = JiaZiPage()

    # 测试修改为已存在的名称
    result1 = jiazi_page.change_jia("3")
    if result1:  # 如果修改操作成功执行
        result1 = jiazi_page.changeJZOK("3")
    print(f"第一次修改结果: {result1}")

    # 测试修改为不存在的名称
    result2 = jiazi_page.change_jia("新夹子")
    if result2:  # 如果修改操作成功执行
        result2 = jiazi_page.changeJZOK("新夹子")
    print(f"第二次修改结果: {result2}")